#ifndef __BASIC_DBC_H__
#define __BASIC_DBC_H__

#include <basic/misc.h>
//#include <basic/dbc_in.h>

__BEGIN_DECLS

/*----- 绑定 -----*/
#define DBC_BIND_MAX_NUM            50 
struct dbc_bind
{/*{{{*/
    char *vars[DBC_BIND_MAX_NUM];
};/*}}}*/
typedef struct dbc_bind DBC_BIND;

/*
 * 绑定定长字符串
 */
extern int
dbc_bind_char(
        DBC_BIND *bind,             /* [IN,OUT] 绑定结构 */
        unsigned int idx,           /* [IN] 序号 */
        char *var,                  /* [IN] 字段 */
        unsigned int col_size       /* [IN] 字段长度 */
        );

/*
 * 绑定字符串
 */
extern int
dbc_bind_varchar(
        DBC_BIND *bind,             /* [IN,OUT] 绑定结构 */
        unsigned int idx,           /* [IN] 序号 */
        char *var                   /* [IN] 字段 */
        );

#define dbc_bind_date dbc_bind_varchar

/*
 * 绑定int
 */
extern int
dbc_bind_int(
        DBC_BIND *bind,             /* [IN,OUT] 绑定结构 */
        unsigned int idx,           /* [IN] 序号 */
        int var                     /* [IN] 字段 */
        );

/*
 * 绑定long
 */
extern int
dbc_bind_long(
        DBC_BIND *bind,             /* [IN,OUT] 绑定结构 */
        unsigned int idx,           /* [IN] 序号 */
        long var                     /* [IN] 字段 */
        );

/*
 * 绑定int64
 */
//extern int
//dbc_bind_int64(
//        DBC_BIND *bind,             /* [IN,OUT] 绑定结构 */
//        unsigned int idx,           /* [IN] 序号 */
//        int64_t var                 /* [IN] 字段 */
//        );

/*
 * 绑定double
 */
extern int
dbc_bind_double(
        DBC_BIND *bind,             /* [IN,OUT] 绑定结构 */
        unsigned int idx,           /* [IN] 序号 */
        double var                  /* [IN] 字段 */
        );

/* 查询结果集 */
struct dbc_rset
{/*{{{*/
    char ***rows;
    int col_num;
    int row_num;
    int row_alloc_num;
    enum
    {
        QUERY_BOTTOM,                   /* 查询到底 */
        QUERY_HALFWAY                	/* 查询中途 */
    } query_flag;
};/*}}}*/
typedef struct dbc_rset DBC_RSET;

/*
 * 引用字段
 */
extern char *
dbc_col_ref(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx        /* [IN] 列 */
        );

/*
 * 输出字符串
 */
extern char *
dbc_col_export_char(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx,       /* [IN] 列 */
        char *host                  /* [OUT] 输出缓冲区 */
        );

/*
 * 复制字符串
 */
extern char *   /* 复制的内容 */
dbc_col_dup_char(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx        /* [IN] 列 */
        );

/*
 * 接管字段
 */
extern char *   /* 接管的地址 */
dbc_col_take_char(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx        /* [IN] 列 */
        );

/*
 * 输出int
 */
extern int
dbc_col_export_int(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx        /* [IN] 列 */
        );

/*
 * 输出long
 */
extern long
dbc_col_export_long(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx        /* [IN] 列 */
        );

/*
 * 输出int64
 */
//extern int64_t
//dbc_col_export_int64(
//        DBC_RSET *rset,             /* [IN] 结果集 */
//        unsigned int row_idx,       /* [IN] 行 */
//        unsigned int col_idx        /* [IN] 列 */
//        );

/*
 * 输出double
 */
extern double
dbc_col_export_double(
        DBC_RSET *rset,             /* [IN] 结果集 */
        unsigned int row_idx,       /* [IN] 行 */
        unsigned int col_idx        /* [IN] 列 */
        );

/*
 * 释放查询结果集
 */
extern void
dbc_query_free(
    DBC_RSET *rset                  /* [IN] 查询结果集 */
);

__END_DECLS

#endif
